package com.tourism.core.security.util;


import com.tourism.core.common.exception.CustomException;
import com.tourism.core.common.utils.ResultCodeEnum;
import com.tourism.core.mybatis.entity.BaseEntity;
import com.tourism.core.security.entity.LoginUser;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.List;

/**
 * 当前用户信息工具类
 * @author lucky
 */
public class SecurityHolderUtils {


    /**
     * 获取当前登录用户信息
     *
     * @return 当前登录用户信息
     */
    public static LoginUser getLoginUser() {
        try {
            return (LoginUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        } catch (Exception e) {
            throw new CustomException(ResultCodeEnum.AUTH_NOT_LOGIN);
        }
    }

    /**
     * 获取当前登录用户ID
     *
     * @return 当前登录用户ID
     */
    public static Long getUserId() {
        return getLoginUser().getUser().getId();
    }


    /**
     * 获取当前登录用户角色ID集合
     *
     * @return 当前登录用户角色ID集合
     */
    public static List<Long> getRoleIds() {
        return getLoginUser().getUser().getRoles().stream().map(BaseEntity::getId).toList();
    }

}
